<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>es5.0</title>
</head>
<body>
<script>
<!--    题目   -->
//面试可能会问with为啥不用


/*

    //启用es5.0在页面加 "use strict";这是启动全局的
    "use strict";
    //测试一下  4.不支持with，arguments，callee，func，caller，
    function test() {
        //"use strict";//局部的
        console.log(arguments.callee);
    }
    test(1,2,3);//会报错

*/


/*
//  with  会改变作用域链
    var obj = {
        name : "obj"
    };
    with(1){//正常使用
        console.log(name);//window
    }
    var name = "window";
    function testOne() {
        var name = "scope";
        var age = 18;
        with(obj){//如果添加对象，他会把这个对象当做with要执行的代码体作用域的最顶端，
                  // 就改变了作用域链，看到的是obj,obj就成了with的AO，如果obj没有就会找testAO，最后才会找GO
            console.log(name);//obj
            console.log(age);//18
        }
    }
    testOne();




//    命名空间的用法
    var org = {
        departmentOne: {
            deng:{
                name: "deng",
                age: 18
            },
            ji: {
                name: "ji",
                age: 19
            }
        },
        departmentTow: {},
        departmentThree: {},
    };

    with(org.departmentOne.ji){
        console.log(name);
    }
    with(document){//增加了作用域链，降低效率
        write("a");
    }
*/

//    with增加了作用域链，降低效率，所以es5.0来了，with就不能用了


//    4.不支持with，arguments，callee，func，caller，变量赋值前必须声明，局部this必须被赋值

        "use strict";
        function test() {
            console.log(this);//this不在指向window
        }
        test();//undefined
        new test();//test {}  , test{}是该函数的constructor的名
        test.call(123);//123  this变成123
        //全局范围内this指向window
        console.log(this);


//        拒绝重复属性和参数。



</script>

</body>
</html>
